#include "filehandler.h"


/**
* @brief Der Konstruktor zu FileHandler
*
* Initialisiert Variablen wenn welche gebraucht werden.
*/
FileHandler::FileHandler(QObject *parent) :
    QObject(parent)
{
}

/*!
Liest Textdateien ein und gibt sie als QString aus.
@param[in] inputfile Der Pfad inkl. Dateiname der Datei die eingelesen werden soll.
*/
QString FileHandler::readFileText (QString inputfile)
{
    QFile file(inputfile); // Die Datei die Verschlüsselt werden soll
    file.open(QIODevice::ReadOnly | QIODevice::Text); // Als Text-Datei nur zum Lesen öffnen
    QString output;
    output = QString::fromUtf8(file.readAll());
    file.close(); // Datei wieder schließen

    return output;
}

/*!
Liest Dateien binär ein und gibt sie als QByteArray aus.
@param[in] inputfile Der Pfad inkl. Dateiname der Datei die eingelesen werden soll.
*/
QByteArray FileHandler::readFileBinary (QString inputfile)
{
    QFile file(inputfile);
    file.open(QIODevice::ReadOnly);
    QByteArray output = file.readAll();

    return output;
}


/*!
Schreibt Text in die Ausgabedatei
@param[in] outputfile Der Pfad inkl. Dateiname der Datei die geschrieben werden soll.
@param[in] decr Gibt an ob ver- oder entschlüsselt wurde damit der Dateiname angepasst wird: true = entschlüsseln, false = verschlüsseln.
@param[in] content der QString der in die Datei geschrieben werden soll.
*/
void FileHandler::writeFileText (QString outputfile, int decr, QString content)
{
    if (decr == 0)
    {
        outputfile += ".enc";
    }else{
        QString outputfile2 = outputfile;
        outputfile.remove(QRegExp("[.enc]*$"));

        if (outputfile2 == outputfile)
        {
            outputfile += ".dec";
        }
    }

    QFile file(outputfile);

    if(file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out (&file);
        out << content;
        file.close();
    }
    else
    {
        QMessageBox fehler;
        fehler.setText("Fehler beim schreiben der Datei");
        fehler.exec();
    }
}

/*!
Schreibt binär in die Ausgabedatei
@param[in] content der QString der in die Datei geschrieben werden soll.
@param[in] outputfile Der Pfad inkl. Dateiname der Datei die geschrieben werden soll.
@param[in] decr Gibt an ob ver- oder entschlüsselt wurde damit der Dateiname angepasst wird: true = entschlüsseln, false = verschlüsseln.
*/
void FileHandler::writeFileBinary (QByteArray content, QString outputfile, int decr)
{
    if (decr == 0)
    {
        outputfile += ".enc";
    }else{
        QString outputfile2 = outputfile;
        outputfile.remove(QRegExp("[.enc]*$"));

        if (outputfile2 == outputfile)
        {
            outputfile += ".dec";
        }
    }

    QFile file(outputfile);

    if(file.open(QIODevice::WriteOnly))
    {
        file.write(content);
        file.close();
    }
    else
    {
        QMessageBox fehler;
        fehler.setText("Fehler beim schreiben der Datei");
        fehler.exec();
    }
}
